package com.example.springcloud.filter;

import com.netflix.zuul.ZuulFilter;
import org.springframework.stereotype.Component;

@Component
public class MyZuulFilter extends ZuulFilter {

    /**
     * 返回过滤器类型，标准类型是“pre”用于路由前过滤，“route”用于路由到源，“post”用于路由后过滤器，“error”用于错误处理。
     * @return string
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 返回自定义的filter的执行顺序
     * @return int
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 预检， 返回 true 表明需要进行过滤，与shiro类似
     * @return boolean
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 真正执行的过滤器代码，返回值未定义，只需返回null即可
     * @return null
     */
    @Override
    public Object run() {
        System.out.println("zuul filter");
        // 通过设置currentContext.setSendZuulResponse(false)组织继续执行
        // 只在pre类型中生效
        // RequestContext.getCurrentContext().setSendZuulResponse(false);
        return null;
    }
}
